{"componentChunkName":"component---src-templates-blog-post-js","path":"/Translating-React-components/","result":{"data":{"site":{"siteMetadata":{"title":"Aleks Popovic - personal website and blog"}},"markdownRemark":{"id":"e35167a5-5cfb-52b9-a17e-643d9a6f8e62","excerpt":"Having different page files for different languages makes all of the page translations pretty contained and easy for access if something needs to be changed or…","html":"<p>Having different page files for different languages makes all of the page translations pretty contained and easy for access if something needs to be changed or added later on. Separating page components is good because of searching algorithms and SEO. There is also no code duplication, since page components are mostly plain text or markdown. Non-page components are a bit different.</p>\n<p>Let’s say you want to translate your main navigation menu, which is a React component. There is no point in duplicating one component per language, especially if you plan to support more than two languages. Adding any changes to the component in question would create huge amount of footwork which would become a maintenance nightmare.</p>\n<h2>Setting up data</h2>\n<p>One solution would be to make a separate file which is going to house all of our translated data for a particular component. We can set it up so each language’s data is easily accessible and we can pull and render proper text on each page based on our current page’s language. This will make it easy to write logic that handles the language switch and it will make translating any additional content more manageable.</p>\n<p>I created a new folder called data and added a new file to it called menuLabels.js which is going to contain all of my navigation labels. Let’s say the menu has only a few options for simplicity.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">const</span> labels <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  en<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    home<span class=\"token operator\">:</span> <span class=\"token string\">\"home\"</span><span class=\"token punctuation\">,</span>\n    registration<span class=\"token operator\">:</span> <span class=\"token string\">\"registration\"</span><span class=\"token punctuation\">,</span>\n    news<span class=\"token operator\">:</span> <span class=\"token string\">\"news\"</span><span class=\"token punctuation\">,</span>\n    contact<span class=\"token operator\">:</span> <span class=\"token string\">\"contact\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  el<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    home<span class=\"token operator\">:</span> <span class=\"token string\">\"ΑΡΧΙΚΗ\"</span><span class=\"token punctuation\">,</span>\n    registration<span class=\"token operator\">:</span> <span class=\"token string\">\"ΕΓΓΡΑΦΗ\"</span><span class=\"token punctuation\">,</span>\n    news<span class=\"token operator\">:</span> <span class=\"token string\">\"ΝΕΑ\"</span><span class=\"token punctuation\">,</span>\n    contact<span class=\"token operator\">:</span> <span class=\"token string\">\"ΕΠΙΚΟΙΝΩΝΙΑ\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> labels</code></pre></div>\n<p>We export an object called labels, which has language codes as keys, and objects as values, which in turn have key-value pairs such as shown above. The keys need to match between sub-objects because you are going to reference them when deciding which value to show. If you decide to add more menu items, or to support additional languages - no problem, just add new keys and values following this pattern.</p>\n<h2>Getting data</h2>\n<p>Let’s say we already have a bare-bones Menu component with hard-coded text values in English:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Link <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"gatsby\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Menu</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">home</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>registration<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">registration</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>news<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">news</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>contact<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">contact</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Menu</code></pre></div>\n<p>Now we need to import the data file and figure out how to get the correct label from it.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Link <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"gatsby\"</span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token keyword\">import</span> labels <span class=\"token keyword\">from</span> <span class=\"token string\">\"../data/menuLabels\"</span></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Menu</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">props</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> language <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> props</span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> translations <span class=\"token operator\">=</span> labels<span class=\"token punctuation\">[</span>language<span class=\"token punctuation\">]</span></span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"home\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>registration<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"registration\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>news<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"news\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>contact<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"contact\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Menu</code></pre></div>\n<p>First of all, the component needs to accept a language parameter in order for us to know which labels to show. You need to make sure this parameter is passed in as an appropriate language code, like we did in other components in previous parts of this series (e.g. “en” for English).</p>\n<p>After that it’s easy to get the sub-object based on the language code key, and get the labels from it by passing in label names that match those in the data file.</p>\n<h2>Generating Urls</h2>\n<p>The last thing we need to do is adding logic for generating a proper Url for each item., since we can’t leave those hard-coded. Here is what the final code would look like:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Link <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"gatsby\"</span>\n<span class=\"token keyword\">import</span> labels <span class=\"token keyword\">from</span> <span class=\"token string\">\"../data/menuLabels\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Menu</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">props</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> language <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> props\n  <span class=\"token keyword\">const</span> translations <span class=\"token operator\">=</span> labels<span class=\"token punctuation\">[</span>language<span class=\"token punctuation\">]</span>\n\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">formatMenuUrl</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">item</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>language <span class=\"token operator\">===</span> <span class=\"token string\">\"en\"</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">      <span class=\"token keyword\">return</span> item</span><span class=\"gatsby-highlight-code-line\">    <span class=\"token punctuation\">}</span></span><span class=\"gatsby-highlight-code-line\"></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>language<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">/</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>item<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token punctuation\">}</span></span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token function\">formatMenuUrl</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"home\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token function\">formatMenuUrl</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"registration\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">        </span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"registration\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token function\">formatMenuUrl</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"news\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"news\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Link</span></span> <span class=\"token attr-name\">to</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token function\">formatMenuUrl</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"contact\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>translations<span class=\"token punctuation\">[</span><span class=\"token string\">\"contact\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Link</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Menu</code></pre></div>\n<p>We added a simple function which accepts a menu item as a parameter and checks the language. If the language is English we don’t need to add a prefix to the Url, since we have previously set up English to not use a prefix as our default language in <a href=\"/Setting-up-page-structure-for-a-multilingual-website-in-Gatsby-and-React/\">Part #1 of the series</a>. Otherwise we add a prefix to our Urls. This makes adding new languages extremely easy to implement later if necessary.</p>\n<h2>Other implementations</h2>\n<p>That’s it, for this component at least, but you can apply a similar principle to other use-cases as well. Most components will just require that you pull an appropriate label from the file without any additional logic.</p>\n<p>For example, you can apply this to a contact form component by pulling labels and input placeholders.</p>\n<p>If you have a custom button component which you use all over your application you can easily translate your buttons’ text this way.</p>\n<p>In case you are making a personal multilingual website you could even translate your whole CV or a portfolio page by combining techniques discussed in all three parts of this series. Possibilities are almost endless - depending on how many languages are you willing to support.</p>\n<p>If you’ve followed through the <a href=\"/tags/multilingual\">whole series</a> (or at least parts of it that you needed) - you should now have a working multilingual website with a customizable language switch, component and page translations. Regardless of what is your development stack you now have a lot of flexibility with how to further set up your pages and components.</p>\n<hr>\n<div class=\"sectionHighlight\">If you have any questions or comments you can reach out to me on <a href=\"https://twitter.com/alekswritescode\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter</a> and <a href=\"https://www.instagram.com/aleks.popovic/\" target=\"_blank\" rel=\"noopener noreferrer\">Instagram</a>, where I also post interesting code tidbits and designs.\n<p>I also have a <a href=\"https://www.youtube.com/AleksPopovic\" target=\"_blank\" rel=\"noopener noreferrer\">YouTube channel</a> where I regularly upload React and web dev tutorials, so if that’s your cup of tea feel free to support me by subscribing.</div></p>","frontmatter":{"title":"Translating React components","series":"How to Build a Multilingual Website with Gatsby and React","seriesLink":"multilingual","date":"August 16, 2020","description":"Having different page files for different languages makes all of the page translations pretty contained and easy for access if something needs to be changed or added later on. Separating page components is good because of searching algorithms and SEO. There is also no code duplication, since page components are mostly plain text or markdown. Non-page components are a bit different.","tags":["web","react","multilingual"],"featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACQklEQVQozw2RW08SAACF+R0t7yKooaKSkSAqchW5CQgIgsgM8IIaK4TUNKWJMzU1ms6czK0tVy43W8tcbulDzhcfWm+99EO+eDpPZ+c75wgMdTosuijG4nr0zRZsHQFc7RGWw1lW++d5vXxE1veYNbWdV0o9wQYd/upGonUqRlU+RhRefHI3ZpECi7gDgUVqxqkdxmWMMLv4lqXwHC65l6Q2SCp2QMS/RVoX5LpPw6LGga3ZzLKqhzO3nYQxxoJvlZA6hq8thOtBAIGzvhOjzIE1fULf2hVjg5v01Xbi90wS3b9lZPsHU29O2MrmGZ3Zw7vxjUT+mq13FzyL75PxzBNVeQqUVqyFhgJTUTnd5U1UGHI0zVyiXvmFrlZNWD+E//kHBjJfiGc+sbJxSmb1ivjcGaHdG5zhHEl7mh3HE8YVfQxKtfRUyhA4Su4SksiQOvcxb97SMvcTtbAVrzVCYPs7wdw5AxuXTL2/5Wn+N0O5K2KZz4z7U8QbtcxYIkyp7OxE13C0PUIw3SBkQd5IjW2Xmugx7YU9usqkeIfmCb88J7Lzl0DigED6mInNG17s/SGZOiIfzJC6r0Ens2EtHLs+uc6IdgzBsCaMvsVGm8SEQSzHXiLEIGzGKVFgqmiip6YDa/k9LKUSTKJWsp4kp6FZvjpmmegaR1MmQ1elQCdSEnpgQ+B+aMM/mMEsUWK4U1rQdtxVUvqr6/EKxViKyxkQ1eKuFNNdVIW2ELLkTvDv4wWH04f4ZL3oCx6tWElvk5H/neVWa8MEErkAAAAASUVORK5CYII=","aspectRatio":2.6666666666666665,"src":"/static/23e2c2b486f8733000f90e001c759f59/0e6e2/translating.png","srcSet":"/static/23e2c2b486f8733000f90e001c759f59/b460a/translating.png 480w,\n/static/23e2c2b486f8733000f90e001c759f59/6e898/translating.png 960w,\n/static/23e2c2b486f8733000f90e001c759f59/0e6e2/translating.png 1920w","srcWebp":"/static/23e2c2b486f8733000f90e001c759f59/30cf3/translating.webp","srcSetWebp":"/static/23e2c2b486f8733000f90e001c759f59/35871/translating.webp 480w,\n/static/23e2c2b486f8733000f90e001c759f59/fcc10/translating.webp 960w,\n/static/23e2c2b486f8733000f90e001c759f59/30cf3/translating.webp 1920w","sizes":"(max-width: 1920px) 100vw, 1920px"}}}}}},"pageContext":{"slug":"/Translating-React-components/","previous":{"excerpt":"You have all of your multilingual pages set up, but now you need to give your users a way to access those pages. There are multiple ways…","fields":{"slug":"/Building-a-language-switch-component-in-React/"},"frontmatter":{"date":"August 14, 2020","title":"Building a language switch component in React","series":"How to Build a Multilingual Website with Gatsby and React","description":"You have all of your multilingual pages set up, but now you need to give your users a way to access those pages. There are multiple ways this can be done. The most common solution is adding a language selection tool in the form of multiple links or by using a drop-down list. In my case - I had to implement three different languages, so I went with the buttons approach.","tags":["web","react","multilingual"],"featuredImage":{"id":"797519ed-9107-5830-a615-f6b80bf76978","publicURL":"/static/b4540dc780b9271335e7b48d0014a453/switch.png","relativeDirectory":"Building-a-language-switch-component-in-React","relativePath":"Building-a-language-switch-component-in-React/switch.png"}}},"next":{"excerpt":"Having a dark mode on your website or application has become very popular. Many big websites and applications are coming up with their own…","fields":{"slug":"/Easy-Dark-Mode-Switch-with-React-and-localStorage/"},"frontmatter":{"date":"September 12, 2020","title":"Easy Dark Mode Switch with React and localStorage","series":null,"description":"Having a dark mode on your website or application has become very popular. Many big websites and applications are coming up with their own version of it and if you want to make one for your own React app you can easily do so with very little JavaScript code and a bit of custom CSS. ","tags":["web","react"],"featuredImage":{"id":"93b88c0e-012e-5048-8c63-e6f216be85cc","publicURL":"/static/c84963620317fe9242f44fecd322767a/darkNew.png","relativeDirectory":"Easy-Dark-Mode-Switch-with-React-and-localStorage","relativePath":"Easy-Dark-Mode-Switch-with-React-and-localStorage/darkNew.png"}}}}}}